Visualização - Remuneração base

Análises semânticas

Autor

Joellen Silva

Data de Publicação

5.fev.2025

Data de Modificação

5.fev.2025

Código
library(tidyverse)
library(here)
library(gt)
library(ggiraph)
library(glue)
library(scales)
library(plotly)
library(dplyr)
library(zoo)
library(ggplot2)
options(scipen = 999)

source(here("tasks/view-remuneracao-base/src/00-plot-aesthetics.R"), encoding = "utf-8")

Resumo

Este relatório tem como objetivo analisar a soma das remunerações mensais de todos os membros por órgão, considerando apenas a remuneração básica, excluindo benefícios.

Principais resultados:

  • Tendências na Remuneração
    • Identificação de flutuações na remuneração mensal por órgão.
  • Comparação com Médias Móveis
    • Meses em que a remuneração superou a média móvel dos últimos três anos para o mesmo mês.
    • Meses em que a remuneração ultrapassou a média móvel dos últimos três meses.

Metodologia

Para cada mês, o somatório da remuneração base será comparada com duas médias móveis:

  • A média móvel dos últimos três anos para o mesmo mês.
  • A média móvel dos últimos três meses em relação ao mês atual.

Além da visualização gráfica, será apresentada uma tabela destacando os meses em que a soma das remunerações ultrapassou uma das médias comparativas, especificando qual delas foi superada.

Análise

Extração dos dados

Os dados foram agrupados utilizando a query: ./tasks/view-remuneracao-base/src/01-extracao.sql

Código
data <- readRDS(here(glue("tasks/view-remuneracao-base/outputs/extracao-{today()}.rds")))


df <- data %>%
  arrange(ano, mes) %>%
  filter(id_orgao == "cnj") %>%
  mutate(ano_mes = sprintf("%d/%02d", ano, mes)) %>%
  mutate(media_movel_3_meses = lag(rollapply(valor, width = 3, FUN = mean, fill = NA, align = "right"))) %>%
  group_by(mes) %>%
  mutate(media_movel_3_anos = lag(rollapply(valor, width = 3, FUN = mean, fill = NA, align = "right"))) %>%
  ungroup()

Visualização Médias Móveis

Apresenta-se a análise das médias móveis da remuneração mensal, considerando duas abordagens:

  • Média móvel dos últimos 3 meses para cada mês
  • Média do mesmo mês nos últimos 3 anos

Para ilustrar essas comparações, foram geradas duas opções de visualização:

  • Opção 1: Dois gráficos separados, cada um representando uma das médias móveis individualmente.
  • Opção 2: Um único gráfico combinando ambas as médias para facilitar a análise conjunta.

Qual abordagem adotar?

Figura 1

Dica

📊 Gráfico interativo, use o mouse para ver detalhes dos dados.

A seguir, apresentamos a visualização dos somatórios da remuneração base por mês e ano, acompanhada da média móvel dos últimos três meses em relação ao mês atual. Essa análise permite identificar variações sazonais e tendências ao longo do período analisado.

Legenda:
  • 🔴 Média Móvel 3 Meses: Representa a média dos 3 meses anteriores.
Código
grafico_mm3m <- ggplot(df, aes(x = ano_mes, y = valor, text = paste0("Ano/Mês: ", ano_mes, "<br>Valor: R$ ", scales::comma(valor, accuracy = 0.1), "<br>Média 3 meses: R$ ", scales::comma(media_movel_3_meses, accuracy = 0.1)))) +
  geom_bar(stat = "identity", fill = "steelblue") +
  geom_errorbar(aes(ymin = media_movel_3_meses, ymax = media_movel_3_meses),
    width = 2.5, color = "red", linewidth = 1.2, na.rm = TRUE
  ) +
  labs(title = "Somatório Remuneração Base - Média Móvel 3 Meses", x = "Ano/Mês", y = "Valor") +
  theme_minimal()

grafico_interativo_mm3m <- ggplotly(grafico_mm3m, tooltip = "text")

grafico_interativo_mm3m %>%
  layout(
    xaxis = list(
      tickmode = "array",
      tickvals = df$ano_mes,
      ticktext = df$ano_mes,
      rangeslider = list(visible = TRUE),
      range = c(length(df$ano_mes) - 11.5, length(df$ano_mes) + 0.5),
      tickangle = 90
    ),
    yaxis = list(
      tickformat = ",.0f",
      showgrid = TRUE
    ),
    dragmode = "pan",
    autosize = TRUE
  )
Figura 1: Gráfico Remuneração Base - Média Móvel 3 Meses

Figura 2

Dica

📊 Gráfico interativo, use o mouse para ver detalhes dos dados.

A seguir, apresentamos a visualização dos somatórios da remuneração base por mês e ano, juntamente com a média móvel dos últimos três anos para o mesmo mês. Essa análise permite avaliar a variação das remunerações ao longo do tempo e identificar possíveis tendências ou anomalias.

Legenda:
  • 🔴 Média Móvel 3 Anos: Representa a média do mesmo mês nos 3 anos anteriores.
Código
grafico_mm3a <- ggplot(df, aes(x = ano_mes, y = valor, text = paste0("Ano/Mês: ", ano_mes, "<br>Valor: R$ ", scales::comma(valor, accuracy = 0.1), "<br>Média 3 anos: R$ ", scales::comma(media_movel_3_anos, accuracy = 0.1)))) +
  geom_bar(stat = "identity", fill = "steelblue") +
  geom_errorbar(aes(ymin = media_movel_3_anos, ymax = media_movel_3_anos),
    width = 2.5, color = "red", linewidth = 1.2, na.rm = TRUE
  ) +
  labs(
    title = "Somatório Remuneração Base - Média Móvel 3 Anos",
    x = "Ano/Mês", y = "Valor"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, size = 10))

grafico_interativo_mm3a <- ggplotly(grafico_mm3a, tooltip = "text")

grafico_interativo_mm3a %>%
  layout(
    xaxis = list(
      tickmode = "array",
      tickvals = df$ano_mes,
      ticktext = df$ano_mes,
      rangeslider = list(visible = TRUE),
      range = c(length(df$ano_mes) - 11.5, length(df$ano_mes) + 0.5),
      tickangle = 90
    ),
    yaxis = list(
      tickformat = ",",
      showgrid = TRUE
    ),
    dragmode = "pan",
    autosize = TRUE
  )
Figura 2: Gráfico Remuneração Base - Média Móvel 3 Anos/Mês

Figura 3

Dica

📊 Gráfico interativo, use o mouse para ver detalhes dos dados.

A seguir, apresentamos a visualização dos somatórios da remuneração base por mês e ano, acompanhados de duas médias móveis:

  • Média móvel dos últimos três meses em relação ao mês atual
  • Média móvel dos últimos três anos para o mesmo mês
Legenda:
  • 🟢 Média Móvel 3 Anos: Representa a média do mesmo mês nos 3 anos anteriores.
  • 🔴 Média Móvel 3 Meses: Representa a média dos 3 meses anteriores.
Código
grafico_mm <- ggplot(df, aes(x = ano_mes, y = valor, text = paste0("Ano/Mês: ", ano_mes, "<br>Valor: R$ ", scales::comma(valor, accuracy = 0.1), "<br>Média 3 meses: R$ ", scales::comma(media_movel_3_meses, accuracy = 0.1), "<br>Média 3 anos: R$ ", scales::comma(media_movel_3_anos, accuracy = 0.1)))) +
  geom_bar(stat = "identity", fill = "steelblue") +
  geom_errorbar(aes(ymin = media_movel_3_anos, ymax = media_movel_3_anos, color = "Média Móvel 3 Anos", text = paste0("<br>Média 3 anos: R$ ", scales::comma(media_movel_3_anos, accuracy = 0.1))),
    width = 2.5, color = "green", linewidth = 1.2, na.rm = TRUE
  ) +
  geom_errorbar(aes(ymin = media_movel_3_meses, ymax = media_movel_3_meses, color = "Média Móvel 3 Meses", , text = paste0("<br>Média 3 meses: R$ ", scales::comma(media_movel_3_meses, accuracy = 0.1))),
    width = 2.5, color = "red", linewidth = 1.2, na.rm = TRUE
  ) +
  scale_color_manual(values = c("Média Móvel 3 Anos" = "green", "Média Móvel 3 Meses" = "red")) +
  labs(
    title = "Somatório Remuneração Base - Média Móvel 3 Anos e 3 Meses",
    x = "Ano/Mês", y = "Valor", color = "Legenda"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, size = 10))

grafico_interativo_mm <- ggplotly(grafico_mm, tooltip = "text")

grafico_interativo_mm %>%
  layout(
    xaxis = list(
      tickmode = "array",
      tickvals = df$ano_mes,
      ticktext = df$ano_mes,
      rangeslider = list(visible = TRUE),
      range = c(length(df$ano_mes) - 11.5, length(df$ano_mes) + 0.5),
      tickangle = 90
    ),
    yaxis = list(
      tickformat = ",.0f",
      showgrid = TRUE
    ),
    dragmode = "pan",
    autosize = TRUE
  )
Figura 3: Gráfico Remuneração Base - Médias Móveis 3 Anos e 3 Meses

Tabela 1

A tabela abaixo apresenta um resumo dos meses dentro do período analisado em que a soma da remuneração base ultrapassou pelo menos uma das médias móveis. Para cada ocorrência, é indicado qual das médias foi superada.

Código
tabela <- df %>%
  filter(!is.na(media_movel_3_meses), !is.na(media_movel_3_anos)) %>%
  filter(valor > media_movel_3_meses | valor > media_movel_3_anos) %>%
  mutate(
    maior_que = case_when(
      valor > media_movel_3_meses & valor < media_movel_3_anos ~ "media_movel_3_meses",
      valor > media_movel_3_anos & valor < media_movel_3_meses ~ "media_movel_3_anos",
      valor > media_movel_3_meses & valor > media_movel_3_anos ~ "ambas"
    )
  )

tabela %>%
  summarise(
    ano = ano,
    mes = mes,
    somatoria = valor,
    maior_que = maior_que
  ) %>%
  arrange(-ano) %>%
  gt(groupname_col = "") %>%
  fmt_currency_brl(columns = somatoria) %>%
  tab_style(
    style = cell_text(size = pct(65)),
    locations = cells_body(columns = maior_que)
  ) %>%
  tab_style(
    style = cell_text(size = pct(75)),
    locations = cells_body(columns = maior_que)
  ) %>%
  tab_options(table.width = pct(100)) %>%
  opt_interactive(use_search = TRUE, use_highlight = TRUE)
Tabela 1: Meses que Ultrapassaram Médias Móveis